package main

import (
	"api_interface/dao"
	"api_interface/entity"
	"api_interface/routes"
	"net/http"
	_ "net/http"
)

// CorsMiddleware是一个用于处理CORS的中间件函数
func CorsMiddleware(next http.Handler) http.Handler {
	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		// 设置允许的源，这里假设允许所有源，如果需要限制，可修改为具体的源列表
		w.Header().Set("Access-Control-Allow-Origin", "*")
		// 设置允许的请求方法
		w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS, DELETE, PUT")
		// 设置允许的请求头，这里假设允许所有头，如果需要限制，可修改为具体的头列表
		w.Header().Set("Access-Control-Allow-Headers", "*")
		// 设置是否允许携带凭证（如Cookie）
		w.Header().Set("Access-Control-Allow-Credentials", "true")
		// 设置预检请求的有效期，这里假设为16800秒（可根据需要调整）
		w.Header().Set("Access-Control-Max-Age", "16800")

		// 如果是预检请求（OPTIONS方法），直接返回200状态码
		if r.Method == "OPTIONS" {
			w.WriteHeader(http.StatusOK)
			return
		}

		// 继续处理下一个中间件或请求处理函数
		next.ServeHTTP(w, r)
	})
}

func main() {
	//连接数据库
	err := dao.InitMySql()
	if err != nil {
		panic(err)
	}
	//程序退出关闭数据库连接
	defer dao.Close()
	//绑定模型
	dao.SqlSession.AutoMigrate(&entity.AccountInfo{})
	dao.SqlSession.AutoMigrate(&entity.MemberInfo{})
	dao.SqlSession.AutoMigrate(&entity.BoxInfo{})
	dao.SqlSession.AutoMigrate(&entity.QuestionInfo{})
	dao.SqlSession.AutoMigrate(&entity.ReportQuestionInfo{})
	dao.SqlSession.AutoMigrate(&entity.ConcernedInfo{})
	dao.SqlSession.AutoMigrate(&entity.CommentInfo{})
	dao.SqlSession.AutoMigrate(&entity.CommentReplyInfo{})
	dao.SqlSession.AutoMigrate(&entity.LikedInfo{})
	dao.SqlSession.AutoMigrate(&entity.MessageInfo{})
	//注册路由
	r := routes.SetRouter()
	// 使用CorsMiddleware中间件包裹路由
	handler := CorsMiddleware(r)//////////////
	//启动端口
	http.ListenAndServe(":9090", handler)////////////
}
